/*
 基本数据类型    关键字    所占空间大小(字节)    格式占位符
 整型            int             4                %d(十进制整型格式占位符)
 短整型      short/short int     2                %hd
 长整型      long/long int       4                %ld

 浮点型         单精度浮点类型精度没有双精度高，如果为了确保数据的精确度建议使用double类型，如果精度要求不高的情况下使用float，可以节省空间
 单精度浮点型    float           4                %f
 双精度浮点型    double          8                %lf

 字符类型        char            1                %c
 
 ASCII 码
		'A '    ===65
		'a'     ===97
		''      ===32
		空格回车 ===13
		'\0'    ===0
	
 有无符号
	有符号：signed 一般定义变量时默认是有符号的 所有可以将signed关键字省略
	无符号：unsigned
			最高位为符号位
	例如: char类型有无符号的取值范围
		signed char类型，1个字节=-=8位  取值范围:-128~127也就是-2个7~2个7-1
		unsigned char类型，            取值范围:0~255也就是O~2个8-1
		signed int类型4个字节==32位     取值范围:-2^31~2^31-1
		unsigned int类型               取值范围:O~2^32-1
		...

 另外：其他格式占位符
    %u  :无符号整型
	%x  :十六进制整型
	%o  :八进制整型
	%p  :十六进制（地址）
	%s  :字符串

 域宽和小数位数的保留   %m.nf
   m:域宽 就是输出时占用字符宽度   m>0 右对齐  m<0 左对齐  当m比实际数据长度小时，会按照实际数据长度输出
   n:保留小数的位数
 
 变量的定义：
        数据类型   变量名 ;
                变量名的命名规则：符号标识符命名规则，并且不能与关键字重名
                            标识符命名规则：由数字、字母、下划线组成，不能以数字开头
        例如：
            int a;   //可以
            int 2a;//错误的
            int _a;//可以
            int float;//不可以   float是一个关键字
	
 sizeof 运算符：用来求所占空间字节大小的运算符

 格式化输入/输出函数
	scanf(格式控制,地址表列)
	printf(格式控制，输出表列)

 c语言数值运算时
	如果两个元素均为整型，那么得到结果也是整型
	如果是一个整型元素与浮点型元素进行运算，得到结果是浮点类型
 数据类型的强转
	(数据类型）（数据）
	int a=4;
	double b;
	b=(double)(a);//将a强制转换为double类型
 */
#include <stdio.h>

int main(void)
{
	char a=65;
	printf("字符方式: %c\n",a);
	printf("ascii方式%d\n" ,a);
	printf("十六进制方式: %x\n" ,a);
	printf("八进制方式: %o\n" ,a);

	a=127 ;
	a++;//a=a+1 ;
	printf(" a=%d\n" ,a);//-128  取值范围
	char b='D';
	printf( "%d\n" ,b+4);

	//浮点类型精度问题
	float c=100/3.0;
	double d=100/3.0;
	printf("c=%f,d=%lf\n",c,d);
	printf("c=%.10f,d=%.10lf\n",c,d);
	printf("d=%.20lf\n",d);
	return 0;

}


//将华氏温度转变为摄氏度 输入一个华氏温度，输出摄氏温度
//C = (F - 32)*5/9
void tmp(void)
{
	int F;
	double C;
	printf("请输入一个数字");
	scanf("%d",&F);
	C = (F - 32)*5/9.0;
	printf("摄氏温度为%lf\n",C);
	return;
	
}

//求两个数的商
int shang(void)
{
	double res ;
	int b=2,a=9;
	res=a/(double)b;
	printf("res=%lf\n",res);
	return 0;
}


//输入两个整数，求两个整数的和
int getsum(void)
{
	//数据定义
	int sum=0,a=0,b=0;//多个同类型变量 是可以直接写在一起，用逗号隔开 sum=0 叫做初始化赋值
	//提醒输入
	printf("请输入两个整数 用逗号隔开");
	//scanf("%d%d",&a,&b);//scanf函数遇到回车或者tab或者空格停止读取，遇到回车结束
	scanf("%d,%d",&a,&b);//分别对a b两个整型变量去进行输入赋值 如果有格式要求 输入时一定要按照格式输入，否则数据会有误
	//求和
	sum=a+b;//= 等号是赋值符号 将等号右边的数据给左边
	//输出sum的值
	printf("sum=%d\n",sum);//%d是给sum占的位置
	return 0;
}


//数据类型大小
int data_type_size(void)
{
	printf("int类型所占空间大小为%zu\n",sizeof(int));
	printf("short int类型所占空间大小为%zu\n",sizeof(short));
	printf("long int类型所占空间大小为%zu\n",sizeof(long));
	printf("float类型所占空间大小为%zu\n",sizeof(float));
	printf("double类型所占空间大小为%zu\n",sizeof(double));
	printf("char类型所占空间大小为%zu\n",sizeof(char));
	return 0;
}
